/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DataTier;

import EntitiesTier.ClAdicao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import Utils.Utilidades;

/**
 *
 * @author Douglas
 */
public class AdicaoDAO {
    private Connection conn;
    
    public AdicaoDAO() throws SQLException{
        
        try{
            this.conn = ConnectionFactory.getConnection();
        }
        catch(Exception e){
            throw new RuntimeException(e.getMessage());
        }
    }
    
    public int incluir(ClAdicao clAdicao) throws Exception{
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;
        if(clAdicao == null)
            throw new RuntimeException("O valor passado não pode ser nulo");
        
        try{
            String SQL = "INSERT INTO contrato_adicao(ADIC_CONT, ADIC_DATA, ADIC_TEMPO, ADIC_MOTIVO, ADIC_TIPODUR) "
                    + "VALUES (?,?,?,?,?)";
            conn = this.conn;
            ps = conn.prepareStatement(SQL, Statement.RETURN_GENERATED_KEYS);
            ps.setInt(1, clAdicao.getADIC_CONT());
            ps.setDate(2, Utilidades.SetDataBD(clAdicao.getADIC_DATA()));
            ps.setInt(3, clAdicao.getADIC_TEMPO());
            ps.setString(4, clAdicao.getADIC_MOTIVO());
            ps.setInt(5, clAdicao.getADIC_TIPODUR());
            ps.executeUpdate();
            rs = ps.getGeneratedKeys();
            if(rs.next())
            { 
                clAdicao.setADIC_COD(rs.getInt(1));
            }
        }catch(SQLException e)
        {
            throw e;
        }
        finally
        {
            ConnectionFactory.closeConnection(conn, ps);
            return(clAdicao.getADIC_COD());
        }
    }
        public void atualizar(ClAdicao clAdicao) throws Exception{
        
        PreparedStatement ps = null;
        Connection conn = null;

        if(clAdicao == null)
            throw new RuntimeException("O valor passado não pode ser nulo");

        try
        {
            String SQL = "UPDATE contrato_adicao SET ADIC_CONT = ? , ADIC_DATA = ? , ADIC_TEMPO = ? , "
                    + "ADIC_MOTIVO  = ?, ADIC_TIPODUR= ? where ADIC_COD = ?";
            conn = this.conn;
            ps = conn.prepareStatement(SQL);
            ps.setInt(1, clAdicao.getADIC_CONT());
            ps.setDate(2,  Utilidades.SetDataBD(clAdicao.getADIC_DATA()));
            ps.setInt(3, clAdicao.getADIC_TEMPO());
            ps.setString(4, clAdicao.getADIC_MOTIVO());
            ps.setInt(5, clAdicao.getADIC_TIPODUR());
            ps.setInt(6, clAdicao.getADIC_COD());
            ps.executeUpdate();
        }
        catch(SQLException e)
        {
            throw e;
        }
        finally
        {
            ConnectionFactory.closeConnection(conn, ps);
        }
        
    }
    
    public List todos() throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("SELECT * FROM contrato_adicao ca");
            rs = ps.executeQuery();
            List<ClAdicao> lista = new ArrayList<ClAdicao>();
            while(rs.next())
            {
                int adic_cod = rs.getInt("ADIC_COD");
                int adic_cont = rs.getInt("ADIC_CONT");
                java.util.Date adic_data = Utilidades.GetDatabd(rs.getDate("ADIC_DATA"));
                int adic_tempo = rs.getInt("ADIC_TEMPO");
                String adic_motivo = rs.getString("ADIC_MOTIVO");
                int adic_tipodur = rs.getInt("ADIC_TIPODUR");

                ClAdicao clAdicao = new ClAdicao(adic_cod, adic_cont, adic_data, adic_tempo, adic_motivo, adic_tipodur);

                lista.add(clAdicao);
            }
            return lista;
        }catch(SQLException e){
            throw e;
        }finally{
            ConnectionFactory.closeConnection(conn, ps, rs);
        }
    }
    
    public List todos(int adic_cont) throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("SELECT * FROM contrato_adicao ca where ca.ADIC_CONT = ?");
            ps.setInt(1, adic_cont);
            rs = ps.executeQuery();
            List<ClAdicao> lista = new ArrayList<ClAdicao>();
            while(rs.next())
            {
                int adic_cod = rs.getInt("ADIC_COD");
                java.util.Date adic_data = Utilidades.GetDatabd(rs.getDate("ADIC_DATA"));
                int adic_tempo = rs.getInt("ADIC_TEMPO");
                String adic_motivo = rs.getString("ADIC_MOTIVO");
                int adic_tipodur = rs.getInt("ADIC_TIPODUR");

                ClAdicao clAdicao = new ClAdicao(adic_cod, adic_cont, adic_data, adic_tempo, adic_motivo, adic_tipodur);

                lista.add(clAdicao);
            }
            return lista;
        }catch(SQLException e)
        {
            throw e;
        }finally
        {
            ConnectionFactory.closeConnection(conn, ps, rs);
        }
    }
    
    public ClAdicao procurar(int adic_cod) throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("SELECT * FROM contrato_adicao WHERE ADIC_COD = ?");
            ps.setInt(1, adic_cod);
            rs = ps.executeQuery();
            if(!rs.next())
            {
                throw new Exception("Não foi encontrado nenhum "
                        + "registro com o ID: " + adic_cod);
            }
            int adic_cont = rs.getInt("ADIC_CONT");
            java.util.Date adic_data = Utilidades.GetDatabd(rs.getDate("ADIC_DATA"));
            int adic_tempo = rs.getInt("ADIC_TEMPO");
            String adic_motivo = rs.getString("ADIC_MOTIVO");
            int adic_tipodur = rs.getInt("ADIC_TIPODUR");

            ClAdicao clAdicao = new ClAdicao(adic_cod, adic_cont, adic_data, adic_tempo, adic_motivo, adic_tipodur);

            return clAdicao;
        }catch(SQLException e)
        {
            throw e;
        }finally{
            ConnectionFactory.closeConnection(conn, ps, rs);
        }
    }
    
    public void excluir(int cod_adic) throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;

        if(cod_adic == 0)
        {
            throw new Exception("O valor passado não pode ser nulo");
        }

        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("DELETE FROM contrato_adicao WHERE ADIC_COD = ?");
            ps.setInt(1, cod_adic);
            ps.executeUpdate();
        }catch(SQLException e)
        {
            throw e;
        }finally{
            ConnectionFactory.closeConnection(conn, ps);
        }
    }
    
    public void excluir_contrato(int cod_cont) throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;

        if(cod_cont == 0)
        {
            throw new RuntimeException("O valor passado não pode ser nulo");
        }

        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("DELETE FROM contrato_adicao WHERE ADIC_CONT = ?");
            ps.setInt(1, cod_cont);
            ps.executeUpdate();
        }catch(SQLException e)
        {
            throw e;
        }finally{
            ConnectionFactory.closeConnection(conn, ps);
        }
    }
}
